package com.blogsystem.service;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.blogsystem.entity.User;
import com.blogsystem.entity.Article;
import com.blogsystem.entity.Comment;
import org.springframework.security.core.Authentication;

import java.util.List;
import java.util.Map;

public interface UserService extends IService<User> {
    // 搜索用户（带分页）
    Page<User> searchUsersByUsername(String keyword, int page, int limit);
    // 获取搜索用户总数（如果有特殊业务需求，否则可通过Page对象获取）
    // int countSearchUsersByUsername(String keyword);
    // 获取所有用户（带分页）
    Page<User> list(int page, int limit);
    // 获取用户总数（如果有特殊业务需求，否则可通过Page对象获取）
    // int countAllUsers();
    /**
     * 根据用户名查找用户
     * @param username 用户名
     * @return 用户对象
     */
    User findByUsername(String username);

    /**
     * 获取用户的文章列表
     * @param userId 用户ID
     * @return 文章列表
     */

    public List<Article> getArticlesByUserId(Integer userId);

    /**
     * 获取用户的评论列表
     * @param userId 用户ID
     * @return 评论列表
     */
    List<Comment> getCommentsByUserId(Integer userId);

    /**
     * 获取用户的统计信息
     * @param userId 用户ID
     * @return 统计信息
     */
    Map<String, Object> getUserStatistics(Integer userId);

    /**
     * 验证用户密码
     * @param userId 用户ID
     * @param rawPassword 用户输入的原始密码
     * @return 密码是否匹配
     */
    boolean checkPassword(Integer userId, String rawPassword);

    /**
     * 更新用户密码
     * @param userId 用户ID
     * @param newPassword 新的密码
     * @return 更新是否成功
     */
    boolean updatePassword(Integer userId, String newPassword);



    /**
     * 更新用户头像
     * @param userId 用户ID
     * @param avatar 新的头像URL
     * @return 更新是否成功
     */
    boolean updateAvatar(Integer userId, String avatar);
    List<User> searchUsersByUsername(String username);
    Map<String, Object> getUserData(Authentication authentication);

    List<Article> getDraftArticles(Integer userId);
    List<Article> getPendingArticles(Integer userId);
    List<Article> getAllPendingArticles();
      int getAllPendingArticlesCount();
}